在很多的情境下,我們會使用到前天所提及的Service Type Loadbalancer,而也因為IP拮据的問題、或是cost問題等等......我們需要額外搭建所謂的reverse proxy,使用相同的對外IP代理不同的服務,在這樣的需求下,我們往往會調整在reverse proxy的規則當中。
而Ingress controller 則是在Kubernetes中被提出的一種solution,以api yaml的方式撰寫規則,背後透過controller進行轉譯,從而達到想要的reverse proxy效果。
目前檯面上的Ingress class 也有許多種選擇如nginx、haproxy、traefik、kong等等......
我這邊選擇的是我常用ingress-nginx,選擇的考量其實也很單純,在還未導入Kubernetes前,nginx & kong 算是一直以來就比較常接觸的工具,其中Kong的定義為Api Gateway,雖說與nginx也頗有淵源,也能夠達到類似效果,但與nginx不同的是更著重在API控管這一塊,如身份驗證、流量控制,等等眾多plugin......
kong是基於OpenResty延伸,而OpenResty則是基於nginx+LuaJIT
順代一提ingress-nginx controller也是基於OpenResty/lua,如果我沒記錯的話
而這裡我的需求要的只是個支援mutidomain的reverse proxy,在這裡ingress-nginx更貼切我的需求
那今天要來安裝Ingress-nginx的controller(ingress-nginx的github連結)
我們這邊要使用helm佈署,所以要先執行下列的動作
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update
## 查看可裝版本
helm search repo ingress -l
比對官網的readme support version,本次lab的kubernetes為1.20,所以最新版本應該都能裝。
使用helm指令操作產出設定檔
## 產出ingress-nginx 使用helm佈署時的參數調整檔
helm show values ingress-nginx/ingress-nginx --version 4.0.1 > values.yml
修改value.yaml,將昨日設定的openELB設定帶入,使地端的LoadBalancer得以運作
service:
enabled: true
annotations:
lb.kubesphere.io/v1alpha1: porter
protocol.porter.kubesphere.io/v1alpha1: layer2
eip.porter.kubesphere.io/v1alpha2: porter-layer2-eip
使用helm指定版本與設定檔案進行佈署
helm install ithome-ingress ingress-nginx/ingress-nginx --version 4.0.1 -f values.yaml -n ithomelab
佈署完成的結果展示
接著必須要設定並佈署ingress.yaml,設定完成後會根據設定的規則被ingress-controller轉譯成對應的nginx設定檔。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
kubernetes.io/ingress.class: "nginx"
name: ithomelab-ing
namespace: ithomelab
spec:
rules:
- host: www.gurubear.cf
http:
paths:
- backend:
service:
name: ithomelab-react-deployment
port:
number: 80
path: /
pathType: Prefix
- backend:
service:
name: ithomelab-api-deployment
port:
number: 80
path: /API
pathType: Prefix
檢查ingress 是否確實綁到IP
因為尚未設定domain與IP Forward,佈署完成後先在本機 /etc/hosts
設定偽造的A Record
192.168.1.240 www.gurubear.cf
打開瀏覽器檢查,左邊為輸入domain的情況,右邊為ip直連
進去container可以看到/etc/nginx中被轉譯的nginx.conf檔案
那到這邊服務都沒問題,明天就來設定真正的domain與憑證的事情了。
其實如果很擅長寫Reverse Proxy Rules的話Ingress好像也不是那麼必要XD。